package com.turing.data.scripts.yhjftzd.filter

import com.alibaba.fastjson.JSON
import com.turing.common.entity.TextVO
import com.turing.data.engine.utils.ScriptsUtils
import com.turing.data.vo.out.review.DependParamsVO
import com.turing.data.vo.out.review.TaskElementVO

/**
 * 场景名称: 外汇缴费通知单
 * 要素名称: 融资类交易-1天（手续费净额）
 * @author: fanyihang
 */

class FinancingTransactionOneDay_30263_66_filter {

    static List< TaskElementVO.DrawResultVO > doConvert(DependParamsVO dependParams){

        List<TaskElementVO.DrawResultVO> trueValueSet = new ArrayList<>()
        List<TaskElementVO.DrawResultVO > resultVOs = ScriptsUtils.tryInitResult(dependParams)
        //子任务id
        def childTaskId = ""
        dependParams.getJSONTextMap().forEach({childTaskSn , jsonText ->
            childTaskId =childTaskSn
        })

        //依赖正则表达式
        String REGEX0 = /1天/
        def resultMatcherList = matching(dependParams,REGEX0,7)

        //行位置要小于关键词2天及以上的行位置
        String REGEX1 = /2天及以上/
        def keyWordMatcherList = matching(dependParams,REGEX1,0)

        if(resultMatcherList.size()>0){
            TaskElementVO.DrawResultVO defaultDrawResultVO = new TaskElementVO.DrawResultVO()
            //第一种情况（没有手续费净额，不存在7行）
            if(keyWordMatcherList.size()>0){
                if(keyWordMatcherList[0].lineStartIndex<resultMatcherList[0].lineStartIndex){
                    //匹配不到直接返回空字符串
                    defaultDrawResultVO.text = ""
                    trueValueSet.add(defaultDrawResultVO)
                    return trueValueSet
                }
            }
            //第二种情况
            //默认结果选第一个,对正则后的内容进行处理
            def originalText = resultMatcherList[0].objContent
            def getFinalReg = /\d.+\d/
            //处理返回的文本
            def matcherText = originalText =~ getFinalReg
            def finalText = originalText
            if(matcherText.count>0){
                finalText = matcherText[0]
                //设置返回的文本
                defaultDrawResultVO.text = finalText
                defaultDrawResultVO.businessValue = defaultDrawResultVO.text
                defaultDrawResultVO.childTaskSn = childTaskId
                defaultDrawResultVO.para_info  =  [resultMatcherList[0].lineId]
                //处理返回文本高亮
                //将处理后的正则结果和原来该行的所有内容进行正则匹配，找出起始位置，默认全文
                def positionMatcher = resultMatcherList[0].objContent =~ getFinalReg
                def positionStart = 0
                def positionEnd = originalText.length()
                while (positionMatcher.find()){
                    positionStart = positionMatcher.start()
                    positionEnd = positionMatcher.end()
                }
                defaultDrawResultVO.pos_info = [positionStart,positionEnd]
                defaultDrawResultVO.text = defaultDrawResultVO.text.replaceAll("，",",")
                trueValueSet.add(defaultDrawResultVO)
                return  trueValueSet
            }
        }

        //返回空字符串
        TaskElementVO.DrawResultVO defaultDrawResultVO = new TaskElementVO.DrawResultVO()
        defaultDrawResultVO.text = ""
        trueValueSet.add(defaultDrawResultVO)
        return  trueValueSet

    }

    //通过正则获得一行内容
    static List<TextVO.Line> matching(DependParamsVO dependParams, String reg, int step){
        //返回结果的集合
        List<TextVO.Line> resultMatcherList = new ArrayList<>()
        //表格类型：通过json文本找到关键词的所在行
        dependParams.getJSONTextMap().forEach({ childTaskSn, jsonText ->
            List<TextVO> textVOList = JSON.parseArray(jsonText, TextVO.class)
            for (i in 0..<textVOList.size()) {
                //获得段落列表
                List<TextVO.Paragraph> listParagraph = textVOList[i].paragraphs
                for (j in 0..<listParagraph.size()) {
                    //获得每行的具体信息
                    List<TextVO.Line> lines = listParagraph[j].lines
                    for (k in 0..<lines.size()) {
                        //每行内容匹配关键词
                        def keyWordMatcher = lines[k].objContent =~ reg
                        if (keyWordMatcher.count > 0) {
                            //结果对象，关键词的下一局
                            resultMatcherList.add(lines[k + step])
                        }
                    }

                }
            }
        })
        return resultMatcherList
    }

}
